#include<iostream>
#include <unistd.h>
#include "ShareMemory.hpp"
#include"Fifo.hpp"
using namespace std;

int main()
{
    shm.CreateShm();
    shm.AttachShm();

    gpipe.OpenPipeForRead();//打开管道为了读


    //在这里进行IPC
    char* strinfo = (char*)shm.GetAddr();//获取共享区的起始地址;发送字符串内容

    struct data* image = (struct data*)shm.GetAddr();//共享内存也可以发结构化的内容
    while(true)
    {
        //printf("%s\n",strinfo);//发送字符串内容

        gpipe.Wait();//先wait
        printf("%s\n",image->status);
        printf("%s\n",image->lasttime);
        printf("%s\n",image->image);
        strcpy(image->status, "过期");
    }

    shm.DetachShm();
    shm.DeleteShm();

    return 0;
}






























// int main()
// {
//     // 1. 创建Key
//     key_t k = ::ftok(gpath.c_str(), gprojId);//确保内存标识符的唯一性；保证看到同一份资源
//     if(k < 0)
//     {
//         std::cerr << "ftok error" << std::endl;
//         return 1;
//     }
//     //2.创建共享内存&&获取
//     // 注意: 共享内存也有权限！
//     int shmid = shmget(k,gshmsize,IPC_CREAT|IPC_EXCL|gmode);
//     if(shmid<0)
//     {
//         cerr<<"shmget error"<<endl;
//         return 2;
//     }
//     cout<<"shmid:"<<shmid<<endl;
//     //3.共享内存挂接到自己的地址空间中
//     void* ret = shmat(shmid,nullptr,0);//shmid是共享内存的id,第二个参数是挂接到哪个地址，第三个参数是标识符表示是读还是写
//     cout<<"attach done"<<(long long)ret<<endl;

//     //在这里进行通信

//     shmdt(ret);//去关联

//     //n.删除共享内存
//     shmctl(shmid,IPC_RMID,nullptr);


//     std::cout << "k : " << ToHex(k) << std::endl;
//     return 0;
// }